let arr = [
  12,
  12,
  342,
  31,
  2243,
  [12, 12, 12],
  123,
  [12123, [12312, [1212, 3446, 5412], 1212], 354573],
  234
];

// 1. es6 中数组的 flat 方法
// console.log(arr.flat(Infinity))

// 2. toString 方法
// arr = arr.toString().split(',').map(Number)

// 3  JSON.stringify
// arr = JSON.stringify(arr).replace(/(\[|\])/g,'').split(',').map(Number)

// 4 递归
// ~(function () {
//   function myFlat() {
//     let result = [];

//     let fn = (arr) => {
//       for (let i = 0; i < arr.length; i++) {
//         let item = arr[i];
//         if (Array.isArray(item)) {
//           fn(item);
//         } else {
//           result.push(item);
//         }
//       }
//     };

//     fn(this);
//     return result;
//   }

//   Array.prototype.myFlat = myFlat;
// })();

// arr = arr.myFlat()

// reduce
// function flatArr(arr) {
//   return arr.reduce((prew, item) => {
//     return prew.concat(Array.isArray(item) ? flatArr(item) : item);
//   }, []);
// }
// arr = flatArr(arr)

// console.log(arr);

// 扩展运算符

while(arr.some(v=>Array.isArray(v))){
  arr = [].concat(...arr)
}

arr = Array.from(new Set(arr));

console.log(arr)
